package com.lykj.lib_base.base

import android.os.Bundle
import android.text.TextUtils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.lykj.lib_base.app.BaseApplication
import com.lykj.lib_base.constants.BConstants
import io.reactivex.disposables.Disposable
import java.util.*
import kotlin.collections.HashMap

/**
 * =======================================================
 * 基础的Fragment父类,取消AutoSize适配使用CancelAdapter
 * =======================================================
 *
 * @author gosha
 * @date 2022/9/2-13:56
 */
abstract class BaseFragment : Fragment() {
    open val bodyParams: HashMap<String, Any> = HashMap()
    open val headerParams: HashMap<String, String> = HashMap()

    private val disposables: LinkedHashMap<String, LinkedList<Disposable>> =
        LinkedHashMap()

    abstract fun initUI()
    abstract fun initData()
    abstract fun setListener()


    //清除 额外请求头,请求体
    open fun clearParam() {
        clearHeaderParam()
        clearBodyParam()
    }

    open fun clearHeaderParam() {
        headerParams.clear()
    }

    open fun clearBodyParam() {
        bodyParams.clear()
    }

    open fun initBodyParam() {
        //FIXME:初始化统一修改信息预留处
//        var deviceId = ""
//        deviceId = if (!DeviceUtil.getUniqueDeviceId(requireActivity()).isNullOrBlank()) {
//            DeviceUtil.getUniqueDeviceId(requireActivity())
//        } else {
//            DeviceUtils.getUniqueDeviceId()
//        }
        bodyParams["channelId"] =
            BaseApplication.instance?.getUserInfo()?.channelId ?: BConstants.AGENT_CODE
        bodyParams["device"] = 2
        bodyParams["imeil"] = BConstants.DEVICE_ID
    }


    /**
     * 添加RxJava一次性资源监控
     *
     * @param clazz 实例对象
     * @param disposable
     */
    open fun addDisposables(clazz: Any, disposable: Disposable) {
        val instanceName = "${clazz::class.java}@${
            Integer.toHexString(
                System.identityHashCode(
                    clazz
                )
            )
        }"
        if (!TextUtils.isEmpty(instanceName)
        ) {
            var mDisposables: LinkedList<Disposable>? = null
            mDisposables = disposables[instanceName]
            if (null != mDisposables) {
                disposables[instanceName]?.add(disposable)
            } else {
                mDisposables = LinkedList()
                mDisposables.add(disposable)
                disposables[instanceName] = mDisposables
            }
        }
    }


    /**
     * 移除RxJava的一次性资源监控
     *
     * @param clazz 实例对象
     */
    open fun removeDisposables(clazz: Any) {
        val instanceName = "${clazz::class.java}@${
            Integer.toHexString(
                System.identityHashCode(
                    clazz
                )
            )
        }"
        if (!TextUtils.isEmpty(instanceName)) {
            var mDisposables: LinkedList<Disposable>? = null
            mDisposables = disposables[instanceName]
            if (null != mDisposables) {
                for (dis in mDisposables) {
                    dis.dispose()
                }
            }
        }
    }
}